package simple;

import sword.offer.common.GenerateList;
import sword.offer.common.ListNode;

/**
 * 给你单链表的头节点 head ，请你反转链表，并返回反转后的链表。
 * @author 胡宇轩
 * @Email: yuxuan.hu01@bianlifeng.com
 */
public class ReverseLinkedList {

    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.reverseList(GenerateList.generate(new int[]{1,2,3,4,5}));
    }
    /**
     * 反转链表
     * 我们可以使用pre指针 + 迭代的方式
     * pre指针 指向链表的上一个数，然后将当前链表的元素的next指向pre指向的元素
     * */
    static class Solution {
        public ListNode reverseList(sword.offer.common.ListNode head) {
            if(head == null){
                return null;
            }
            sword.offer.common.ListNode pre =  null;
            sword.offer.common.ListNode cur = head;
            while(cur != null){
                sword.offer.common.ListNode temp = cur.next;
                cur.next = pre;
                pre = cur;
                cur = temp;
            }
            return pre;
        }
    }
}
